MFC (Microsoft Foundation Classes) অ্যাপ্লিকেশনে Window Messages এবং Message Handling খুবই গুরুত্বপূর্ণ ধারণা। Window Messages হল অ্যাপ্লিকেশন এবং উইন্ডো সিস্টেমের মধ্যে যোগাযোগের মাধ্যম, এবং Message Handling হল এই বার্তাগুলিকে প্রসেস করার প্রক্রিয়া। এই সিস্টেমের মাধ্যমে উইন্ডো ইভেন্ট এবং ইউজার ইন্টারঅ্যাকশন পরিচালনা করা হয়।
Window Messages কী?
Window Messages হল অ্যাপ্লিকেশন বা অপারেটিং সিস্টেম দ্বারা পাঠানো বার্তা যা উইন্ডো (যেমন ফ্রেম, বাটন, বা টেক্সট ফিল্ড) বা অ্যাপ্লিকেশনের মধ্যে ইন্টারঅ্যাকশন তৈরি করে। উদাহরণস্বরূপ, WM_PAINT বার্তা উইন্ডোকে পুনরায় আঁকার নির্দেশ দেয়, WM_KEYDOWN বার্তা কী প্রেস ইভেন্টকে প্রতিনিধিত্ব করে, এবং WM_LBUTTONDOWN বার্তা মাউসের বাম বোতাম ক্লিকের ইভেন্টকে প্রতিনিধিত্ব করে।
এগুলি সাধারণত উইন্ডো মেসেজ লুপের মাধ্যমে প্রসেস করা হয়।
Window Messages এর ধরণ
MFC তে কিছু জনপ্রিয় Window Messages এর উদাহরণ নিচে দেওয়া হলো:
- WM_CREATE: একটি উইন্ডো তৈরি হওয়ার সময় পাঠানো হয়।
- WM_DESTROY: উইন্ডো ধ্বংস হওয়ার সময় পাঠানো হয়।
- WM_PAINT: উইন্ডোতে পেইন্টিং বা রিফ্রেশ করার জন্য পাঠানো হয়।
- WM_SIZE: উইন্ডোর আকার পরিবর্তন হলে পাঠানো হয়।
- WM_KEYDOWN: কিবোর্ডে কোনো কী চাপা হলে পাঠানো হয়।
- WM_LBUTTONDOWN: মাউসের বাম বাটন প্রেস হলে পাঠানো হয়।
- WM_COMMAND: মেনু বা টুলবার কমান্ডের জন্য পাঠানো হয়।
এই বার্তাগুলি অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে ইন্টারঅ্যাকশন ও কাজ পরিচালনা করে।
Message Handling কী?
Message Handling হল সেই প্রক্রিয়া, যার মাধ্যমে উইন্ডো মেসেজগুলির প্রতি অ্যাপ্লিকেশন প্রতিক্রিয়া জানায়। MFC তে, Message Map ব্যবহৃত হয় মেসেজ হ্যান্ডলিংয়ের জন্য। Message Map হল একটি ম্যাক্রো সেট যা উইন্ডোর মেসেজগুলিকে সংশ্লিষ্ট হ্যান্ডলারের ফাংশনে পরিচালিত করে।
Message Map এর ব্যবহার
MFC তে Message Map ব্যবহার করে উইন্ডো মেসেজ হ্যান্ডলিং করা হয়। Message Map ম্যাক্রোতে, উইন্ডো মেসেজের জন্য সংশ্লিষ্ট ফাংশন সনাক্ত করা হয়। প্রতিটি উইন্ডো মেসেজের জন্য একটি ফাংশন থাকে যা সেই মেসেজের প্রতিক্রিয়া জানায়।
Message Map তৈরি করার ধাপসমূহ
Message Map Declaration: প্রথমে, ক্লাসের মধ্যে
BEGIN_MESSAGE_MAPএবংEND_MESSAGE_MAPম্যাক্রো দিয়ে মেসেজ মেপিং শুরু ও শেষ করা হয়।Code Example:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_PAINT() // WM_PAINT বার্তা হ্যান্ডলিং ON_WM_SIZE() // WM_SIZE বার্তা হ্যান্ডলিং ON_COMMAND(ID_FILE_NEW, &CMainFrame::OnFileNew) END_MESSAGE_MAP()Message Handler Implementation: এরপর, মেসেজ মেপিংয়ের মাধ্যমে প্রতিটি মেসেজের জন্য সংশ্লিষ্ট হ্যান্ডলার ফাংশন তৈরি করতে হয়। উদাহরণস্বরূপ:
Code Example:
void CMainFrame::OnPaint() { CPaintDC dc(this); // সঠিকভাবে পেইন্ট করার জন্য DC ব্যবহার করুন // উইন্ডোতে আঁকার কোড } void CMainFrame::OnSize(UINT nType, int cx, int cy) { // উইন্ডোর আকার পরিবর্তন হলে কাজ করুন } void CMainFrame::OnFileNew() { AfxMessageBox(_T("New File Command Triggered")); }
Common Window Messages এবং তাদের হ্যান্ডলার
1. WM_PAINT:
এই বার্তা উইন্ডোতে পুনরায় আঁকার জন্য পাঠানো হয়। এটি সাধারণত OnPaint() ফাংশনের মাধ্যমে হ্যান্ডল করা হয়।
Code Example:
void CMainFrame::OnPaint()
{
CPaintDC dc(this); // Paint Device Context
// উইন্ডোর কাস্টম গ্রাফিক্স বা টেক্সট আঁকার কোড
dc.TextOut(50, 50, _T("Hello, MFC!"));
}
2. WM_SIZE:
যখন উইন্ডোর আকার পরিবর্তিত হয়, তখন WM_SIZE বার্তা পাঠানো হয়। এটি সাধারণত OnSize() ফাংশনের মাধ্যমে হ্যান্ডল করা হয়।
Code Example:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
// উইন্ডোর আকার পরিবর্তন হলে আরও কিছু কোড
}
3. WM_KEYDOWN:
কীবোর্ডে একটি কী চাপা হলে WM_KEYDOWN বার্তা পাঠানো হয়। এটি সাধারণত OnKeyDown() ফাংশনের মাধ্যমে হ্যান্ডল করা হয়।
Code Example:
void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if (nChar == VK_RETURN) // Enter key pressed
{
AfxMessageBox(_T("Enter key pressed"));
}
}
4. WM_LBUTTONDOWN:
মাউসের বাম বাটন ক্লিক হলে WM_LBUTTONDOWN বার্তা পাঠানো হয়। এটি সাধারণত OnLButtonDown() ফাংশনের মাধ্যমে হ্যান্ডল করা হয়।
Code Example:
void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)
{
AfxMessageBox(_T("Left mouse button clicked"));
}
Message Handling এর গুরুত্বপূর্ণ পয়েন্ট
- Message Map ব্যবহার করে মেসেজগুলিকে যথাযথ ফাংশনে হ্যান্ডল করা হয়।
- MFC তে, উইন্ডো মেসেজগুলি সাধারণত ON_COMMAND, ON_WM_PAINT, ON_WM_SIZE, ON_WM_KEYDOWN ইত্যাদি ম্যাক্রো দিয়ে হ্যান্ডল করা হয়।
- Message Map তে উইন্ডো মেসেজের জন্য সংশ্লিষ্ট হ্যান্ডলার ফাংশন সংজ্ঞায়িত করা হয়।
- PreTranslateMessage() ফাংশন ব্যবহার করে আপনি বার্তা প্রসেসিং এর আগে কিছু অতিরিক্ত লজিক বা ফিল্টার যুক্ত করতে পারেন।
সারাংশ
MFC অ্যাপ্লিকেশনে Window Messages এবং Message Handling হল গুরুত্বপূর্ণ বিষয়, যা উইন্ডো ইভেন্ট এবং ইউজার ইন্টারঅ্যাকশন পরিচালনা করতে সহায়তা করে। Message Map এবং Message Handlers এর মাধ্যমে উইন্ডো মেসেজগুলির সঠিক প্রক্রিয়াকরণ সম্ভব হয়, যা অ্যাপ্লিকেশনের কার্যকারিতা এবং ইউজার এক্সপেরিয়েন্স উন্নত করে।
Read more